/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @return int整型vector<vector<>>
     */
    vector<vector<int> >ans;
    queue<TreeNode*>q1,q2;
    
    vector<vector<int> > levelOrder(TreeNode* root) {
        // write code here
        if(!root)return ans;
        vector<int>tmp;
        q1.push(root);
        while(1){
            tmp.clear();
            if(q1.empty()&&q2.empty()){
                break;
            }else if(!q1.empty()){
                while(!q1.empty()){
                    TreeNode* temp=q1.front();
                    tmp.emplace_back(temp->val);
                    if(temp->left)q2.push(temp->left);
                    if(temp->right)q2.push(temp->right);
                    q1.pop();
                }
            }else{
                while(!q2.empty()){
                    TreeNode* temp=q2.front();
                    tmp.emplace_back(temp->val);
                    if(temp->left)q1.push(temp->left);
                    if(temp->right)q1.push(temp->right);
                    q2.pop();
                }
            }
            ans.emplace_back(tmp);
        }
        return ans;
    }
};